package com.java.TCP;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * TCP协议发送数据：相当于客户端，需建立连接后才可发送数据。先运行服务端再运行客户端发生数据，查看服务端控制台数据接收情况
 */
public class SocketSend {
    public static void main(String[] args) throws IOException {
        // 创建对象：创建对象时尝试连接服务端，若连接失败则抛出异常ConnectException
        Socket socket = new Socket("127.0.0.1", 8888);
        
        while (true) {
            System.out.println("---------------------------------------------------");
            System.out.println("客户端" + socket.getLocalPort() + "发送的数据为 ");
            String send = new Scanner(System.in).nextLine();
            if ("再见".equals(send)) {
                break;
            }
            
            // getOutputStream：获取输出流，并通过输出流在网络中传输数据到指定主机的指定端口
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write(send.getBytes());
        }
        
        // shutdownOutput：关闭输出流。Socket需重新创建才能再次发送数据
        socket.shutdownOutput();
        
        // shutdownInput：关闭输入流。Socket需重新创建才能再次接收数据
        socket.shutdownInput();
        
        // close：关闭流并释放资源。使用完后必须释放Socket资源否则抛出异常SocketException
        socket.close();
    }
}
